import { clearAuthCache, getToken } from '@/utils/auth'

// 缓存版本号，用于检测是否需要清理缓存
const CACHE_VERSION = '1.0.1'
const CACHE_VERSION_KEY = 'app-cache-version'

// 检查缓存版本，如果版本不匹配则清理缓存
export function checkCacheVersion() {
  const currentVersion = localStorage.getItem(CACHE_VERSION_KEY)
  if (currentVersion !== CACHE_VERSION) {
    console.log('缓存版本不匹配，清理应用缓存（保留认证信息）')
    clearAppCache()
    localStorage.setItem(CACHE_VERSION_KEY, CACHE_VERSION)
  }
}

// 清理应用缓存（保留认证信息）
export function clearAppCache() {
  // 需要保留的key（认证相关和版本信息）
  const keysToKeep = [
    CACHE_VERSION_KEY,
    'Admin-Token',
    'Admin-Expires-In',
    'Admin-Token-Time',
    'last-force-refresh'
  ]

  const localStorageKeys = Object.keys(localStorage)
  localStorageKeys.forEach(key => {
    if (!keysToKeep.includes(key)) {
      localStorage.removeItem(key)
    }
  })

  // 清理sessionStorage（但保留认证相关）
  const sessionKeysToKeep = ['sessionObj']
  const sessionStorageKeys = Object.keys(sessionStorage)
  sessionStorageKeys.forEach(key => {
    if (!sessionKeysToKeep.includes(key)) {
      sessionStorage.removeItem(key)
    }
  })

  console.log('应用缓存已清理（保留认证信息）')
}

// 清理所有缓存
export function clearAllCache() {
  // 清理认证相关缓存
  clearAuthCache()

  // 清理应用缓存
  const keysToKeep = [CACHE_VERSION_KEY] // 保留的key
  const localStorageKeys = Object.keys(localStorage)

  localStorageKeys.forEach(key => {
    if (!keysToKeep.includes(key)) {
      localStorage.removeItem(key)
    }
  })

  // 清理sessionStorage
  sessionStorage.clear()

  console.log('所有缓存已清理')
}

// 强制刷新页面并清理缓存
export function forceRefreshWithClearCache() {
  clearAllCache()
  // 延迟一下再刷新，确保缓存清理完成
  setTimeout(() => {
    window.location.reload()
  }, 100)
}

// 检查是否需要强制刷新
export function checkForceRefresh() {
  const token = getToken()
  const lastRefreshTime = localStorage.getItem('last-force-refresh')
  const currentTime = new Date().getTime()

  // 如果有token但是超过7天没有强制刷新，则执行强制刷新
  if (token && lastRefreshTime) {
    const timeDiff = currentTime - parseInt(lastRefreshTime)
    const sevenDaysInMs = 7 * 24 * 60 * 60 * 1000 // 改为7天

    if (timeDiff > sevenDaysInMs) {
      console.log('超过7天，执行强制刷新')
      localStorage.setItem('last-force-refresh', currentTime.toString())
      forceRefreshWithClearCache()
      return true
    }
  } else if (token && !lastRefreshTime) {
    // 首次设置刷新时间
    localStorage.setItem('last-force-refresh', currentTime.toString())
  }

  return false
}

// 初始化缓存管理
export function initCacheManager() {
  // 检查缓存版本
  checkCacheVersion()

  // 只在有token时才检查是否需要强制刷新
  const token = getToken()
  if (token) {
    checkForceRefresh()
  }

  // 监听页面可见性变化，当页面重新可见时检查缓存
  document.addEventListener('visibilitychange', () => {
    if (document.visibilityState === 'visible') {
      checkCacheVersion()
    }
  })

  // 监听存储变化，如果其他标签页清理了缓存，当前页面也要响应
  window.addEventListener('storage', (e) => {
    if (e.key === CACHE_VERSION_KEY && e.newValue !== CACHE_VERSION) {
      console.log('检测到其他标签页清理了缓存，当前页面也进行清理（保留认证信息）')
      clearAppCache()
      // 不需要重新加载页面，只是清理应用缓存
    }
  })
}

// 手动清理缓存的方法（可以在设置页面调用）
export function manualClearCache() {
  if (confirm('确定要清理所有缓存吗？这将会刷新页面并重新登录。')) {
    forceRefreshWithClearCache()
  }
}
